package com.itheima.tliasmanager.controller;

import com.itheima.tliasmanager.pojo.domain.Emp;
import com.itheima.tliasmanager.pojo.vo.LoginVo;
import com.itheima.tliasmanager.pojo.vo.Result;
import com.itheima.tliasmanager.service.EmpService;
import com.itheima.tliasmanager.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@Slf4j
@RestController
public class LoginController {

    @Autowired
    private EmpService empService;


    /**
     * 处理登录请求处理器方法
     */
    @PostMapping("/login")
    public Result login(@RequestBody Emp emp){
        //1.接收请求参数：接收用户的登录信息
        //json格式：@RequestBody  + 实体对象/Map对象
        log.info("用户登录，请求参数：{}" , emp);

        //2.调用service业务方法，完成登录功能
        Emp empResult = empService.checkLogin(emp);

        //3.封装并返回结果数据
        LoginVo loginVo = new LoginVo();

        //spring框架提供，实体对象属性拷贝：将一个对象的属性拷贝到另一个对象相同的属性中
        BeanUtils.copyProperties(empResult,loginVo);

        //4.使用JJWT工具类生成令牌（登录成功后进行颁发令牌）
        //4.1 创建载荷，在令牌中存储自定义的数据
        Map claims = new HashMap();
        claims.put("id",empResult.getId());
        claims.put("username",empResult.getUsername());
        claims.put("name",empResult.getName());

        //4.2 使用JJWT工具类生成令牌
        String token = JwtUtils.generateJwt(claims);

        //5.将令牌设置到返回结果中
        loginVo.setToken(token);

        return Result.success(loginVo);//code=1,msg="success",data=loginVo
    }


}
